<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

class Game_3 extends CI_Controller{
    
    // Création du constructeur de la classe "Reserve"
    public function __construct(){
        parent::__construct();
        
        // Chargement du helper 'url'
        $this->load->helper('url');
        // Chargement du helper 'assets'
        $this->load->helper('assets');
        
        // Chargement de la base de données
        $this->load->database();

        // Chargement des modèles nécessaires à l'enregistrement des résultats
        $this->load->model('medals_model');
        $this->load->model('qr_codes_model');
        $this->load->model('users_images_model');
        $this->load->model('users_medals_model');
        $this->load->model('users_qr_codes_model');
        $this->load->model('users_chapters_model');

    }
    
    
    // Création de la fonction index de chargement de la page de la réserve
    public function index(){
        
        $data = array();
        
        $data['title'] = "Pixworld";
        
        // Chargement de la vue de base de la réserve
        $this->load->view("game3/game3_env1_view", $data);
    }
    
    
    
    // Fonction permettant le chargement d'un nouvel environnement du jeu 2
    public function loadNewEnvironment(){
        
        $env=$_POST['environment'];

        // Chargement de la vue en fonction de la valeur de la variable 'environment' récupérée suite
        // à la requête AJAX
        if($env)
            $this->load->view("game3/game3_env".$env."_view");

    }
    
    // Fonction permettant le lancement d'une animation de fin de jeu et de sauvegarde en BDD
    public function endGame(){

        $data = array();
        $score=$_POST['timer'];
        $data['score'] = $score;
        $data['game_id'] = 3;

        if($score){

            // Traitement des résultats en fonction de la valeur de la variable 'zcore' récupérée
            if($score <= 150){
                // On récupère une médaille d'or
                $medal = "gold";
                // On gagne 3 cartes
                $nb_cartes = 3;
            }
            if(($score > 150) && ($score <= 300)){
                // On récupère une médaille d'argent
                $medal = "silver";
                // On gagne 2 cartes
                $nb_cartes = 2;
            }
            if($score > 300){
                // On récupère une médaille de bronze
                $medal = "bronze";
                // On gagne 1 carte
                $nb_cartes = 1;
            }

            $data['medal'] = $medal;
            $data['nb_cartes'] = $nb_cartes;
            $data['couleur_pierre'] = 'jaune';

            $this->load->view("game_end/game_end_view", $data);
        }
    }
     
    public function saveResult(){

        $medal = $_POST['medal'];

        // Si on a bien transmis les données
        if($medal){

            // Enregistrement en base plusieurs temps

            switch($medal){
                case 'gold':
                    $nb_cartes = 3;
                    $medal_id= 1;
                    break;
                case 'silver':
                    $nb_cartes = 2;
                    $medal_id= 2;
                    break;
                case 'bronze':
                    $nb_cartes = 1;
                    $medal_id= 3;
                break;
            }

            // On regarde si l'utilisateur possède déjà un résultat en base
            $result_game = $this->medals_model->get_result(3);
            $result_game = $result_game[0];

            // Si l'utilisateur n'a pas de résultats
            if($result_game==null){

                // On sauvegarde les résultats en créant de nouvelles lignes en base

                // Table users_images
                $saveDatasImages = true;
                for($i=7;$i<(7+$nb_cartes);$i++){
                    $datasImages = array('users_id' => 1, 'images_id' => $i);
                    if(! $this->users_images_model->add_row($datasImages)){
                        $saveDatasImages=false;
                    }
                }

                // Table users_qr_codes
                $saveDatasQRCode = true;
                $datasQRCode = array('users_id' => 1, 'qr_codes_id' => 3);
                if(! $this->users_qr_codes_model->add_row($datasQRCode)){
                    $saveDatasQRCode=false;
                }

                // Table users_medals
                $saveDatasMedal = true;
                $datasMedal = array('users_id' => 1, 'medals_id' => $medal_id, 'jeu_id' => 3);
                if(! $this->users_medals_model->add_row($datasMedal)){
                    $saveDatasMedal=false;
                }

                // Table users_chapters
                $saveDatasChapters = true;
                $datasChapters = array('users_id' => 1, 'chapters_id' => 3);
                if(! $this->users_chapters_model->add_row($datasChapters)){
                    $saveDatasChapters=false;
                }

                if((!$saveDatasImages)||(!$saveDatasQRCode)||(!$saveDatasMedal)||(!$saveDatasChapters)){
                    $this->load->view("callbacks/save_error");
                }
                else{
                    $this->load->view("callbacks/save_success");
                }
            }

            // Si l'utilisateur avait déjà des résultats
            else{
                // On regarde si l'utilisateur a fait un meilleur score
                switch($result_game->medals_url){
                    case 'or':
                        $bdd_medal_id= 1;
                        $bdd_nb_cartes = 3;
                        break;
                    case 'argent':
                        $bdd_medal_id= 2;
                        $bdd_nb_cartes = 2;
                        break;
                    case 'bronze':
                        $bdd_medal_id= 3;
                        $bdd_nb_cartes = 1;
                    break;
                }

                // Si l'utilisateur a fait un meilleur score que celui présent en base
                if($bdd_nb_cartes < $nb_cartes){

                    //Alors on fait un update dans la base

                    // Sur la table 'users_medals'
                    $updateDatasMedal = true;
                    $datasMedal = array('users_id' => 1, 'medals_id' => $medal_id, 'jeu_id' => 3);
                    if(! $this->users_medals_model->update_row($datasMedal)){
                        $updateDatasMedal=false;
                    }

                    // Sur la table 'users_images', on ajoute tout de même l'accès aux cartes manquantes
                    $nb_cartes_to_add = $nb_cartes - $bdd_nb_cartes;
                    $counter_start_value = (9 - $nb_cartes_to_add) + 1;
                    $updateDatasImages = true;
                    for($i=$counter_start_value;$i<($counter_start_value+$nb_cartes_to_add);$i++){
                        $datasImages = array('users_id' => 1, 'images_id' => $i);
                        if(! $this->users_images_model->add_row($datasImages)){
                            $updateDatasImages=false;
                        }
                    }

                    // Si la mise à jour s'est mal passée
                    if((!$updateDatasImages)||(!$updateDatasMedal)){
                        $this->load->view("callbacks/save_error");
                    }
                    // Sinon
                    else{
                        $this->load->view("callbacks/save_success");
                    }
                }
                else{
                    // Dans le cas où un utilisateur fait un moins bon score ou un score identique
                    // on conserve le score présent en base en affichanr cependant la vue de succès
                    $this->load->view("callbacks/save_success");
                }

            }

        }
        // Si on n'a pas bien transmis les données
        else{
            $this->load->view("callbacks/save_error");
        }

    }

}


?>
